package com.caioweb.osa.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.SessionScoped;
import javax.inject.Inject;

import com.caio.svn.UtilSvn;
import com.caioweb.osa.dao.ClienteDAO;
import com.caioweb.osa.dao.DAO;
import com.caioweb.osa.modelo.Ambiente;
import com.caioweb.osa.modelo.Branch;
import com.caioweb.osa.modelo.Cliente;
import com.caioweb.osa.modelo.TipoAmbienteCliente;
import com.caioweb.osa.modelo.TipoBancoDeDados;
import com.caioweb.osa.transacoes.interceptor.Transactional;

@SessionScoped
public class AmbienteBean implements Serializable {

	private Ambiente ambiente = new Ambiente();	
	@Inject
	private AmbienteBean ambienteBean;
	@Inject
	private Cliente cliente;
	@Inject
	private Branch branch;
	@Inject
	private DAO<Ambiente> daoAmbiente;
	@Inject
	private DAO<Branch> daoBranch;
	@Inject
	private DAO<TipoBancoDeDados> daoBanco;
	@Inject
	private DAO<TipoAmbienteCliente> daoAmbienteCliente;
	
	private List<TipoAmbienteCliente> ambienteClientes;
	private List<Branch> branchs;
	@Inject
	ClienteDAO dao;
	
	private Long idTipoBanco;
	private Long idAmbienteCliente;

	private List<AmbienteBean> lista = new ArrayList<AmbienteBean>();
	private List<Cliente> clientes = new ArrayList<Cliente>();
	private List<TipoBancoDeDados> bancoDeDados = new ArrayList<TipoBancoDeDados>();
	
	public final static String INTERNO = "INTERNO";
	public final static String EXTERNO = "ENTREGA";
	
	
	@Transactional
	public void grava(){
		this.ambiente.setTipoAmbienteCliente(daoAmbienteCliente.buscaPorId(idAmbienteCliente));
		this.ambiente.setTipoBancoDeDados(daoBanco.buscaPorId(idTipoBanco));
		daoAmbiente.adiciona(ambiente);
		UtilSvn.mensagem("Ambiente gravado com sucesso!!" ,true);
		this.ambiente = new Ambiente();
		this.idTipoBanco = null;
		
	}
	
	public void trocaRevisao(){
		if(this.ambiente.getBranch() != null){
			ambiente.setNrinicial(this.ambiente.getBranch().getRevisao());
		}
	}

	public AmbienteBean getAmbienteBean() {
		return ambienteBean;
	}

	public void setAmbienteBean(AmbienteBean ambienteBean) {
		this.ambienteBean = ambienteBean;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Branch getBranch() {
		return branch;
	}

	public void setBranch(Branch branch) {
		this.branch = branch;
	}

	public List<AmbienteBean> getLista() {
		return lista;
	}

	public void setLista(List<AmbienteBean> lista) {
		this.lista = lista;
	}
	@Transactional
	public List<Cliente> completaCliente(String sigla) {
		this.clientes = dao.listaTodosComeca(sigla);
		return clientes;
	}

	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}

	public Ambiente getAmbiente() {
		return ambiente;
	}

	public void setAmbiente(Ambiente ambiente) {
		this.ambiente = ambiente;
	}

	public ClienteDAO getDao() {
		return dao;
	}

	public void setDao(ClienteDAO dao) {
		this.dao = dao;
	}
	@Transactional
	public List<Branch> getBranchs(){
		this.branchs = daoBranch.listaTodos();
		return branchs;
		
	}
	
	public String getInterno(){
		return INTERNO;
	}
	public String getExterno(){
		return EXTERNO;
	}

	public Long getIdTipoBanco() {
		return idTipoBanco;
	}

	public void setIdTipoBanco(Long idTipoBanco) {
		this.idTipoBanco = idTipoBanco;
	}
	@Transactional
	public List<TipoBancoDeDados> getBancos(){
		this.bancoDeDados = daoBanco.listaTodos();
		return bancoDeDados;
	}
	@Transactional
	public List<TipoAmbienteCliente> getAmbienteClientes() {
		this.ambienteClientes  = daoAmbienteCliente.listaTodos();
		return ambienteClientes;
	}

	public void setAmbienteClientes(List<TipoAmbienteCliente> ambienteClientes) {
		this.ambienteClientes = ambienteClientes;
	}

	public Long getIdAmbienteCliente() {
		return idAmbienteCliente;
	}

	public void setIdAmbienteCliente(Long idAmbienteCliente) {
		this.idAmbienteCliente = idAmbienteCliente;
	}
	
	
	
	
	


}
